package com.qf.controller;

import com.qf.entity.Student;
import com.qf.service.StudentService;
import com.qf.utils.Constants;
import com.qf.utils.StudentDataStore;
import com.qf.vo.ResultVo;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
import java.util.UUID;

@RestController   // 如果默认接口返回的数据是json的化，就使用这个注解即可
@RequestMapping("/student")  // 公共路径  /student/**
public class StudentController {

    // 依赖注入，由spring框架在启动过程中为这个属性进行赋值，赋值的依据为接口类行
    @Autowired
    private StudentService studentService;


    @GetMapping("/pic")
    public void pic(String picname, HttpServletResponse response) throws IOException {

        System.out.println("接收到的参数为:"+picname);

        //1. 根据picname找到对应的头像文件
        String studentPicDir = Constants.STUDENT_PIC_DIR;

        File file = new File(studentPicDir + picname);

        //2. 把文件的内容返回 （把文件的内容放到响应体中）
        // 获取响应对象
        IOUtils.copy(new FileInputStream(file),response.getOutputStream());

    }


    @PostMapping("/multiup")
    public ResultVo multiuploadPic(MultipartFile file1,MultipartFile file2) throws IOException {
        System.out.println("接收到的文件的文件名为:"+file1.getOriginalFilename());
        System.out.println("接收到的文件的文件名为:"+file2.getOriginalFilename());
        // 找个目录，存放找个图片文件

        // 上传的目录
        String studentPicDir = Constants.STUDENT_PIC_DIR;
        // 文件名 （避免重名）
        String filename = UUID.randomUUID().toString();
        // 处理文件扩展名
        String oldname = file2.getOriginalFilename();
        int index = oldname.lastIndexOf(".");
        String extname = oldname.substring(index);

        // 保存文件到指定 位置
        file2.transferTo(new File(studentPicDir + filename+extname));

        // 返回可以获取找个图片的 url
        return new ResultVo(200, "ok", "url");
    }

    @PostMapping("/up/id")
    public ResultVo uploadpicwithid( MultipartFile pic,Integer id ) throws IOException {
        System.out.println(id);
        System.out.println("接收到的文件的文件名为:"+pic.getOriginalFilename());
        // 找个目录，存放找个图片文件

        // 上传的目录
        String studentPicDir = Constants.STUDENT_PIC_DIR;
        // 文件名 （避免重名）
        String filename = UUID.randomUUID().toString();
        // 处理文件扩展名
        String oldname = pic.getOriginalFilename();
        int index = oldname.lastIndexOf(".");
        String extname = oldname.substring(index);

        // 保存文件到指定 位置
        pic.transferTo(new File(studentPicDir + filename+extname));

        String url = "http://192.168.1.76:8080/student/pic?picname="+(filename+extname);

        // 根据id找到对应的学生对象，然后给学生对象设置头像信息
        for (int i = 0; i < StudentDataStore.stuList.size(); i++) {
            Student student = StudentDataStore.stuList.get(i);
            if(student.getId().equals(id)){
               student.setPicUrl(url);
               break;
            }
        }


        return new ResultVo(200, "ok", url);
    }


    @PostMapping("/up")
    public ResultVo uploadPic(MultipartFile file) throws IOException {
        System.out.println("接收到的文件的文件名为:"+file.getOriginalFilename());
        // 找个目录，存放找个图片文件

        // 上传的目录
        String studentPicDir = Constants.STUDENT_PIC_DIR;
        // 文件名 （避免重名）
        String filename = UUID.randomUUID().toString();
        // 处理文件扩展名
        String oldname = file.getOriginalFilename();
        int index = oldname.lastIndexOf(".");
        String extname = oldname.substring(index);

        // 保存文件到指定 位置
        file.transferTo(new File(studentPicDir + filename+extname));

        String url = "http://192.168.1.76:8080/student/pic?picname="+(filename+extname);

        // 返回可以获取找个图片的 url
        return new ResultVo(200, "ok", url);
    }


    @GetMapping("/list")
    public ResultVo list(){

        List<Student> data = studentService.list();
        return new ResultVo(200,"ok",data);
    }

    // id可以为null，如果id为null，则由后端生成学生id
    @PostMapping("/add")
    // 注意，如果是post请求，并且前端发送的数据是请求体中的json，
    // 需要使用对象收参，并且在对象前面添加 @RequestBody
    public ResultVo add(@RequestBody Student student){
        System.out.println("接收的到的参数为:"+student);
        List<Student> data = studentService.add(student);
        return new ResultVo(200,"ok",data);
    }


    @PostMapping("/edit")
    public ResultVo edit(@RequestBody Student student){
        System.out.println("接收的到的参数为:"+student);
        studentService.edit(student);
        return new ResultVo(200,"ok","修改成功");
    }

    @DeleteMapping("/delete")
    public ResultVo delete(Integer id){
        System.out.println("接收的到的参数为:"+id);
        studentService.delete(id);
        return new ResultVo(200,"ok","删除成功");
    }


    @GetMapping("/findbyId")
    public ResultVo findbyId(Integer id, HttpServletRequest request){

        // 从请求头中获取 自定义的请求头 token
        String token = request.getHeader("token");
        System.out.println(token);

        System.out.println("接收的到的参数为:"+id);
        Student student = studentService.findbyId(id);
        return new ResultVo(200,"ok",student);
    }



}
